package models

import (
	"gorm.io/gorm"
	"menu-generation-go/utils"
	"time"
)

// User 用户表结构
type MenuUser struct {
	ID         uint      `gorm:"primaryKey;autoIncrement" json:"id"`
	GroupID    int       `gorm:"column:group_id" json:"group_id"` // 暂时先不多租户
	OrgID      int       `gorm:"column:org_id" json:"org_id"`     // 暂时先不多租户
	Account    string    `gorm:"column:account;type:varchar(100)" json:"account"`
	Password   string    `gorm:"column:password;type:varchar(255)" json:"password"`
	Salt       string    `gorm:"column:salt;type:varchar(50)" json:"salt"`
	Coins      int       `gorm:"column:coins" json:"coins"`
	Status     int8      `gorm:"column:status;default:1" json:"status"`
	Remark     string    `gorm:"column:remark;type:varchar(255)" json:"remark"`
	NickName   string    `gorm:"column:nick_name;type:varchar(255)" json:"nick_name"`
	Avatar     string    `gorm:"column:avatar;type:varchar(255)" json:"avatar"`
	OpenID     int       `gorm:"column:open_id" json:"open_id"`
	UnionID    int       `gorm:"column:union_id" json:"union_id"`
	SignLayout string    `json:"sign_layout"` // 打印角标
	Gender     string    `json:"gender"`
	XBalance   float64   `json:"xBalance"` // x币余额
	Floor      string    `json:"floor" gorm:"floor"`
	UpdatedAt  time.Time `gorm:"column:updated_at" json:"updated_at"`
	CreatedAt  time.Time `gorm:"column:created_at" json:"created_at"`
}

// TableName 设置表名
func (MenuUser) TableName() string {
	return "menu_user"
}

// BeforeCreate 钩子 - 创建前生成盐值
func (mu *MenuUser) BeforeCreate(tx *gorm.DB) error {
	mu.Salt = utils.GenerateSalt()
	return nil
}

// VerifyPassword 验证密码
func (mu *MenuUser) VerifyPassword(password string) bool {
	return utils.EncryptPassword(password, mu.Salt) == mu.Password
}

// GetUserByID 根据ID获取用户信息
func (mu *MenuUser) GetUserByID(db *gorm.DB, id uint) error {
	if err := db.Where("id = ?", id).First(mu).Error; err != nil {
		return err
	}
	return nil
}
